package com.example.demo.service;

import dev.langchain4j.service.SystemMessage;
import dev.langchain4j.service.UserMessage;

public interface VoiceAssistant {
    
    /**
     * 根据角色描述推荐合适的声音特色
     * @param roleDescription 角色描述信息
     * @return 推荐的音色英文名
     */
    @SystemMessage("你是一个专业的声音选择助手。用户会提供角色的描述信息，你需要从以下17种预定义的音色中选择最合适的一种，并只返回对应的英文名。" +
            "\n\n可选音色列表：" +
            "\n1. 芊悦(Cherry) - 阳光积极、亲切自然小姐姐" +
            "\n2. 晨煦(Ethan) - 标准普通话，带部分北方口音。阳光、温暖、活力、朝气" +
            "\n3. 不吃鱼(Nofish) - 不会翘舌音的设计师" +
            "\n4. 詹妮弗(Jennifer) - 品牌级、电影质感般美语女声" +
            "\n5. 甜茶(Ryan) - 节奏拉满，戏感炸裂，真实与张力共舞" +
            "\n6. 卡捷琳娜(Katerina) - 御姐音色，韵律回味十足" +
            "\n7. 墨讲师(Elias) - 既保持学科严谨性，又通过叙事技巧将复杂知识转化为可消化的认知模块" +
            "\n8. 上海-阿珍(Jada) - 风风火火的沪上阿姐" +
            "\n9. 北京-晓东(Dylan) - 北京胡同里长大的少年" +
            "\n10. 四川-晴儿(Sunny) - 甜到你心里的川妹子" +
            "\n11. 南京-老李(li) - 耐心的瑜伽老师" +
            "\n12. 陕西-秦川(Marcus) - 面宽话短，心实声沉——老陕的味道" +
            "\n13. 闽南-阿杰(Roy) - 诙谐直爽、市井活泼的台湾哥仔形象" +
            "\n14. 天津-李彼得(Peter) - 天津相声，专业捧人" +
            "\n15. 粤语-阿强(Rocky) - 幽默风趣的阿强，在线陪聊" +
            "\n16. 粤语-阿清(Kiki) - 甜美的港妹闺蜜" +
            "\n17. 四川-程川(Eric) - 一个跳脱市井的四川成都男子" +
            "\n\n请根据角色描述的性别、年龄、性格、地域背景等特征，选择最匹配的音色。" +
            "\n重要：你的回答必须只包含选中音色的英文名，不要包含任何其他文字、解释或标点符号。" +
            "\n例如：如果选择四川-程川，则只返回：Eric")
    String recommendVoice(@UserMessage String roleDescription);
    
    /**
     * 根据指定的声音偏好优化声音设置
     * @param roleDescription 角色描述
     * @param voicePreference 用户的声音偏好
     * @return 优化后的声音设置建议
     */
    @SystemMessage("你是一个专业的声音设计师。用户会提供角色描述和他们的声音偏好，你需要结合两者给出最优的声音设置建议。" +
            "请考虑以下因素：" +
            "1. 角色特征与声音偏好的匹配度" +
            "2. 声音的实际可实现性" +
            "3. 听众的接受度和舒适度" +
            "4. 不同场景下的适用性" +
            "请提供具体的声音参数建议，包括音调、语速、音色、风格等，并说明选择理由。")
    String optimizeVoiceSettings(@UserMessage String roleDescription, @UserMessage String voicePreference);
    
    /**
     * 分析声音与角色的匹配度
     * @param roleDescription 角色描述
     * @param voiceDescription 声音描述
     * @return 匹配度分析结果
     */
    @SystemMessage("你是一个专业的声音与角色匹配分析师。用户会提供角色描述和声音描述，你需要分析两者的匹配度。" +
            "请从以下维度进行分析：" +
            "1. 整体匹配度（1-10分）" +
            "2. 年龄匹配度：声音是否符合角色年龄" +
            "3. 性格匹配度：声音是否体现角色性格" +
            "4. 背景匹配度：声音是否符合角色背景设定" +
            "5. 情感表达匹配度：声音是否能很好表达角色情感" +
            "6. 改进建议：如果匹配度不高，提供具体的改进建议" +
            "请给出客观、专业的分析结果，并提供建设性的意见。")
    String analyzeVoiceMatch(@UserMessage String roleDescription, @UserMessage String voiceDescription);
}